#include <stdio.h>
#include <locale.h>
#include "../list.h"

// 调试版本的ListGet函数
void* debugListGet(List* list, int index) {
    printf("[调试] ListGet调用: list=%p, index=%d\n", list, index);
    printf("[调试] list->size=%zu, list->capacity=%zu\n", list->size, list->capacity);
    
    if (list == NULL) {
        printf("[调试] 条件1触发: list is NULL\n");
        return NULL;
    }
    
    printf("[调试] 条件2检查: index >= list->size (%d >= %zu) = %d\n", 
           index, list->size, (index >= list->size));
    printf("[调试] 条件2检查: index < -list->size (%d < -%zu) = %d\n", 
           index, list->size, (index < -list->size));
    
    if (index >= list->size || index < -list->size) {
        printf("[调试] 条件2触发: index out of range\n");
        return NULL;
    }
    
    if (index < 0) {
        printf("[调试] 条件3触发: index < 0, 调整为 %d\n", index + (int)list->size);
        index += list->size;
    }
    
    printf("[调试] 返回 list->data[%d] = %p\n", index, list->data[index]);
    return list->data[index];
}

int main() {
    // 设置区域为中文UTF-8
    setlocale(LC_ALL, "zh_CN.UTF-8");
    printf("=== 调试测试程序 ===\n\n");
    
    // 创建列表
    List* list = ListNew();
    printf("创建列表成功\n\n");
    
    // 添加一个元素
    int value = 42;
    printf("添加元素: value=%d, 地址=%p\n", value, &value);
    ListAdd(list, &value);
    printf("添加后列表状态: size=%zu, capacity=%zu\n\n", list->size, list->capacity);
    
    // 使用原始ListGet
    printf("=== 测试原始ListGet ===\n");
    void* result1 = ListGet(list, 0);
    printf("ListGet(0) 返回: %p\n\n", result1);
    
    // 使用调试版本的ListGet
    printf("=== 测试调试版本ListGet ===\n");
    void* result2 = debugListGet(list, 0);
    printf("debugListGet(0) 返回: %p\n\n", result2);
    
    // 直接访问内部数据
    printf("=== 直接访问内部数据 ===\n");
    printf("list->data[0] = %p\n", list->data[0]);
    if (list->data[0] != NULL) {
        printf("*(int*)list->data[0] = %d\n", *(int*)list->data[0]);
    }
    
    // 清理
    ListFree(list);
    printf("\n测试完成！\n");
    return 0;
}